home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / MODIFY.ASM < prev    next >
Assembly Source File  |  1991-08-08  |  5KB  |  220 lines

  1. code    segment
  2.         assume  cs:code
  3.         org     100h
  4. prog:
  5.         mov     cx,(offset last - offset main + 1) / 2
  6.         mov     dx,0
  7.         mov     si,offset main
  8.         cmp     ax,0
  9.         xor     cx,0
  10.         nop
  11.         xor     si,0
  12.         nop
  13. l103:   inc     ax
  14. l102:   inc     bp
  15. l101:   clc
  16. l100:   xor     word ptr [si],dx
  17.         inc     si
  18.         inc     si
  19.         dec     ax
  20.         dec     bp
  21.         loop    l100
  22.  
  23. main:
  24.         call    make
  25.         call    save
  26.  
  27.         mov     al,00h
  28.         mov     ah,4ch
  29.         int     21h
  30.  
  31. cdc     dw      0
  32.  
  33. make    proc    near
  34.         call    copy
  35.         mov     bx,offset dcdr
  36.         call    ch1
  37.         call    ch2
  38.         mov     bp,bx
  39.         mov     di,offset dcdd
  40.         call    ch30
  41.         call    copy1
  42.         call    ch4
  43.         ret
  44. make    endp
  45.  
  46. save    proc    near
  47.         mov     ah,3ch
  48.         mov     dx,offset fn
  49.         sub     cx,cx
  50.         int     21h
  51.         jc      ioerr
  52.         mov     bx,ax
  53.         mov     dx,offset prog
  54.         mov     cx,offset last - offset prog
  55.         mov     ax,es
  56.         mov     ds,ax
  57.         mov     ah,40h
  58.         int     21h
  59.         jc      ioerr
  60.         mov     ah,3eh
  61.         int     21h
  62. ioerr:  ret
  63. save    endp
  64.  
  65. copy1   proc    near
  66.         mov     si,offset dcdr
  67.         mov     di,offset prog
  68.         mov     cx,offset dcdd - offset dcdr
  69.         rep     movsb
  70.         ret
  71. copy1   endp
  72.  
  73. ch4     proc    near
  74.         mov     ax,cdc
  75.         mov     bx,offset main
  76.         mov     cx,(offset last - offset main + 1) / 2
  77.         push    es
  78.         pop     ds
  79. lch4:   xor     word ptr [bx],ax
  80.         inc     bx
  81.         inc     bx
  82.         loop    lch4
  83.         push    cs
  84.         pop     ds
  85.         ret
  86. ch4     endp
  87.  
  88. ch30    proc    near
  89.         sub     cx,cx
  90.         mov     cl,byte ptr [di]
  91.         inc     di
  92. l30:    call    ch31
  93.         add     di,3
  94.         loop    l30
  95.         ret
  96. ch30    endp
  97.  
  98. ch31    proc    near
  99.         push    cx
  100.         mov     cx,8
  101. l31:    call    rndm
  102.         call    ch32
  103.         loop    l31
  104.         pop     cx
  105.         ret
  106. ch31    endp
  107.  
  108. ch32    proc    near
  109.         sub     ax,ax
  110.         mov     al,byte ptr [di]
  111.         mov     si,bp
  112.         add     si,ax
  113.         mov     al,byte ptr [di+1]
  114.         mov     bx,ax
  115.         mov     al,byte ptr [di+2]
  116.         call    ch33
  117.         ret
  118. ch32    endp
  119.  
  120. ch33    proc    near
  121.         push    cx
  122. lbeg:   rcr     dx,1
  123.         jc      noch
  124.         mov     cx,bx
  125. lch:    mov     ah,byte ptr [si]
  126.         xchg    ah,byte ptr [si+bx]
  127.         mov     byte ptr [si],ah
  128.         inc     si
  129.         loop    lch
  130.         jmp     short lend
  131. noch:   add     si,bx
  132. lend:   dec     al
  133.         jnz     lbeg
  134.         pop     cx
  135.         ret
  136. ch33    endp
  137.  
  138.  
  139. ch2     proc    near
  140.         rcr     dx,1
  141.         jc      nobx
  142.         inc     byte ptr [bx+03]
  143.         add     byte ptr [bx+24],8
  144. nobx:   rcr     dx,1
  145.         jc      nodi
  146.         inc     byte ptr [bx+06]
  147.         inc     byte ptr [bx+17]
  148.         inc     byte ptr [bx+24]
  149.         inc     byte ptr [bx+25]
  150.         inc     byte ptr [bx+26]
  151. nodi:   ret
  152. ch2     endp
  153.  
  154. ch1     proc    near
  155.         call    irnd
  156.         mov     word ptr [bx+04],dx
  157.         mov     cdc,dx
  158.         call    rndm
  159.         mov     word ptr [bx+01],(offset last - offset main + 1) / 2
  160.         xor     word ptr [bx+01],dx
  161.         xor     word ptr [bx+14],dx
  162.         call    rndm
  163.         mov     word ptr [bx+07],offset main
  164.         xor     word ptr [bx+07],dx
  165.         xor     word ptr [bx+18],dx
  166.         call    rndm
  167.         mov     word ptr [bx+10],dx
  168.         rcr     dx,1
  169.         jc      no1
  170.         inc     byte ptr [bx+30]
  171. no1:    rcr     dx,1
  172.         jc      no2
  173.         inc     byte ptr [bx+30]
  174.         inc     byte ptr [bx+30]
  175. no2:    ret
  176. ch1     endp
  177.  
  178. copy    proc    near
  179.         mov     ax,cs
  180.         add     ax,1000h
  181.         mov     es,ax
  182.         mov     si,offset prog
  183.         mov     di,si
  184.         mov     cx,offset last - offset prog
  185.         rep     movsb
  186.         ret
  187. copy    endp
  188.  
  189. irnd    proc    near
  190.         mov     ah,2ch
  191.         int     21h
  192.         add     dx,cx
  193.         ret
  194. irnd    endp
  195.  
  196. rndm    proc    near
  197.         mov     ax,cs
  198.         mul     dx
  199.         add     dx,ax
  200.         ret
  201. rndm    endp
  202.  
  203. dcdr    db      0b9h,0aeh,0,0bah,10h,20h
  204.         db      0beh,1fh,1,3dh,0,0
  205.         db      81h,0f1h,0,0
  206.         db      81h,0f6h,0,0
  207.         db      40h,45h,0f8h
  208.         db      31h,14h
  209.         db      46h,46h,48h,4dh
  210.         db      0e2h,0f5h
  211.  
  212. dcdd    db      4,0,3,3,12,4,1,20,1,2,25,1,3
  213.  
  214. fn      db      'super.com',0
  215.  
  216. last    label   byte
  217. code    ends
  218.         end     prog
  219.  
  220.